﻿using BeautySalon.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace BeautySalon.Pages
{
    /// <summary>
    /// Логика взаимодействия для AddEntryPage.xaml
    /// </summary>
    public partial class AddEntryPage : Page
    {
        // Объявление переменной для работы с классом
        private ClientService client_service = new ClientService();

        public AddEntryPage(ClientService selectClientService)
        {
            InitializeComponent();

            if (selectClientService != null)
            {
                Manager.IsEdit = true;
                client_service = selectClientService;
            }

            DataContext = client_service;

            SelectClientCbx.ItemsSource = Entities.GetContext().Client.ToList();
            SelectClientCbx.SelectedValuePath = "ID";
            SelectClientCbx.DisplayMemberPath = "FirstName";

            SelectServiceCbx.ItemsSource = Entities.GetContext().Service.ToList();
            SelectServiceCbx.SelectedValuePath = "ID";
            SelectServiceCbx.DisplayMemberPath = "Title";
        }

        // Назад на страницу просмотра
        private void BackBtn_Click(object sender, RoutedEventArgs e)
        {
            Manager.IsEdit = false;
            NavigationService.Navigate(new EntriesPage());
        }

        // Сохранить новую запись
        private void SaveNewRecordBtn_Click(object sender, RoutedEventArgs e)
        {
            // Проверка
            StringBuilder errors = new StringBuilder();
            if (string.IsNullOrWhiteSpace(client_service.StartTime.ToString()))
                errors.AppendLine("* Строка времени начала оказания не может быть пустой!");
            if (SelectClientCbx.SelectedIndex == -1)
                errors.AppendLine("* Не выбран клиент");
            if (SelectServiceCbx.SelectedIndex == -1)
                errors.AppendLine("* Не выбрана услуга");
            if (Manager.IsEdit == false)
            {
                foreach (var record in Entities.GetContext().ClientService)
                {
                    if (record.ClientID == client_service.ClientID &&
                        record.ServiceID == client_service.ServiceID &&
                        record.StartTime == client_service.StartTime)
                        errors.AppendLine("* Такая запись уже существует на это время");
                }
            }

            // Если есть ошибки, вывести их
            if (errors.Length > 0)
            {
                MessageBox.Show(errors.ToString());
                return;
            }

            // Добавление записи, если ее ID == 0
            if (client_service.ID == 0)
                Entities.GetContext().ClientService.Add(client_service);

            // Сохранение
            try
            {
                Entities.GetContext().SaveChanges();
                MessageBox.Show("Данные сохранены");
                Manager.IsEdit = false;
                NavigationService.Navigate(new EntriesPage());
            } catch (Exception ex)
            { MessageBox.Show(ex.Message); }
        }
    }
}
